package com.zbkj.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.zbkj.dal.entity.order.DuesOrder;
import com.zbkj.dal.entity.wechat.WechatPayInfo;
import com.zbkj.dal.pojo.request.CreateDuesOrderRequest;
import com.zbkj.dal.pojo.request.PageParamRequest;
import com.zbkj.dal.pojo.request.ba.QueryDuesOrderRequest;
import com.zbkj.dal.pojo.response.CreateDuesOrderResponse;
import com.zbkj.dal.pojo.response.DuesOrderDetailVO;
import com.zbkj.dal.pojo.response.ba.DuesOrderResponse;
import com.zbkj.service.model.vo.DuesOrderListVO;

import java.util.List;

public interface DuesOrderService extends IService<DuesOrder> {

    /**
     * 创建会费充值订单
     * @param createDuesOrderRequest
     * @return
     */
    CreateDuesOrderResponse createDuesOrder(CreateDuesOrderRequest createDuesOrderRequest);

    /**
     * 根据订单号获取订单
     * @param orderNo
     * @return
     */
    DuesOrder getByOrderNo(String orderNo);

    /**
     * 根据第三方订单号获取会费订单
     * @param outTradeNo
     * @return
     */
    DuesOrder getDuesOrderByOutTradeNo(String outTradeNo);

    /**
     * 支付成功回调
     * 1.更新订单支付状态，支付时间
     * 2.更新会员总会费值
     * 3.是否需要升级
     * 4.保存充值流水
     * @param duesOrder
     * @return
     */
    Boolean paySuccessAfter(DuesOrder duesOrder, WechatPayInfo wechatPayInfo);

    /**
     * 我的会费充值订单列表
     * @param status
     * @param pageRequest
     * @return
     */
    List<DuesOrderListVO> listMyDuesOrder(Integer status, PageParamRequest pageRequest);

    /**
     * 删除我的订单
     * @param orderNo
     * @return
     */
    Boolean deleteMyOrder(String orderNo);

    /**
     * 后台订单查询（分页）
     * @param duesOrderRequest
     * @param pageRequest
     * @return
     */
    PageInfo<DuesOrderResponse> pageDuesOrders(QueryDuesOrderRequest duesOrderRequest, PageParamRequest pageRequest);

    /**
     * 不分页，用于导出
     * @param duesOrderRequest
     * @return
     */
    List<DuesOrderResponse> duesOrders(QueryDuesOrderRequest duesOrderRequest);

    DuesOrderDetailVO duesOrderDetail(String orderNo);
}
